package com.yupi.generator;

import com.yupi.model.MainTemplateConfig;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException ;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

public class DynamicGenerator {
    public static void main(String[] args) throws IOException, TemplateException {
        //指定模板文件的路径
        String projectPath = System.getProperty("user.dir") + File.separator + "hezi-generator-basic";
        File parentFile = new File(projectPath);
        File file = new File(parentFile,"src/main/resources/templates/MainTemplate.java.ftl");
        String inputPath = file.getPath();
        String outputPath = projectPath + File.separator + "MainTemplate.java";

        System.out.println(parentFile.getPath());

        //数据模型
        MainTemplateConfig mainTemplateConfig = new MainTemplateConfig();
        mainTemplateConfig.setAuthor("陈河良");
        mainTemplateConfig.setOutputText("输出信息：");
        mainTemplateConfig.setLoop(true);

        doGenerate(inputPath, outputPath, mainTemplateConfig);

    }

    /**
     * 生成文件
     * @param inputPath     模板输入路径
     * @param outputPath    生成文件输出路径
     * @param dataModel     数据模型
     * @throws IOException
     * @throws TemplateException
     */
    public static void doGenerate(String inputPath, String outputPath, Object dataModel) throws IOException, TemplateException {
        //new 出 Configuration 对象，参数为FreeMarker版本号
        Configuration configuration = new Configuration(Configuration.VERSION_2_3_32);

        //指定模板文件所在的路径
        File templateDir  = new File(inputPath).getParentFile();
        configuration.setDirectoryForTemplateLoading(templateDir);

        //设置模板文件使用的字符集
        configuration.setDefaultEncoding("utf-8");
        //改变数字格式，数字不带逗号
        configuration.setNumberFormat("0.######");

        // 创建模板对象，加载指定模板
        String templateName = new File(inputPath).getName();
        Template template = configuration.getTemplate(templateName);

        Writer out = new FileWriter(outputPath);
        template.process(dataModel, out);

        // 生成文件后别忘了关闭哦
        out.close();
    }
}
